package com.raymond.thread.manager.circulation;

import com.raymond.thread.manager.StaticValues;


/**
 * 循环主备线程任务
 * 当前线程继承了BaseCirculationThread,有着BaseCirculationThread的循环执行功能
 * 新增功能:线程需要主备切换中执行,当前服务是主服务才会运行
 * 实现executeMainBackup()方法,执行当前线程需要处理的业务即可
 * 重写init()方法,线程开始运行时,运行一次,异常线程直接退出
 * 当前服务是主服务executeMainBackup()方法,就会一直执行此任务,返回是否需要休眠,true需要休眠,false直接运行
 * 当前服务不是主服务,是备用服务时,不会执行executeMainBackup()方法
 * 休眠时间sleep,默认一秒执行一次,通过setSleep(long sleep)可以设置休眠时间,单位毫秒
 * 重写after()方法,线程退出的时候运行
 * @author :  raymond
 * @version :  V1.0
 * @date :  2020-09-10 14:40
 */
public abstract class BaseCirculationMainBackupThread extends BaseCirculationThread {

    @Override
    protected final boolean execute() {
        if (!StaticValues.IS_MAIN) {
            return true;
        }
        return executeMainBackup();
    }

    /**
     * 当前服务是主服务executeMainBackup()方法,就会一直执行此任务,返回是否需要休眠,true需要休眠,false直接运行
     * 当前服务不是主服务,是备用服务时,不会执行executeMainBackup()方法
     * @return 是否需要休眠,true需要休眠后运行,false直接再次运行
     */
    protected abstract boolean executeMainBackup();

}
